import 'package:json_annotation/json_annotation.dart';
import 'index.dart';

part 'transaction_response.g.dart';

/// 交易响应数据实体类
@JsonSerializable()
class TransactionResponse extends Object {
  /// 交易金额（单位：分）
  @JsonKey(name: 'amount', defaultValue: '0')
  String amount;

  /// 银行授权码/批准码
  @JsonKey(name: 'approvedCode', defaultValue: '')
  String approvedCode;

  /// 交易批次号
  @JsonKey(name: 'batchNumber', defaultValue: '')
  String batchNumber;

  /// 卡片数据输入方式：
  /// "CONTACT" - 插卡/刷卡
  /// "CONTACTLESS" - 非接支付
  /// "MANUAL" - 手动输入
  @JsonKey(name: 'cardDataEntry', defaultValue: '')
  String cardDataEntry;

  /// 持卡人验证方式：
  /// "SIGNATURE" - 签名
  /// "PIN" - 密码
  /// "NONE" - 无验证
  @JsonKey(name: 'cardHolderVerificationMethod', defaultValue: '')
  String cardHolderVerificationMethod;

  /// 卡号（脱敏显示）
  @JsonKey(name: 'cardNumber', defaultValue: '')
  String cardNumber;

  /// 卡组织/品牌：
  /// "VISA"、"MASTERCARD"、"UNIONPAY"等
  @JsonKey(name: 'cardProduct', defaultValue: '')
  String cardProduct;

  /// 货币代码
  @JsonKey(name: 'currencyCode', defaultValue: '')
  String currencyCode;

  /// 交易日期（格式：YYYYMMDD）
  @JsonKey(name: 'date', defaultValue: '')
  String date;

  /// EMV应用的AID（应用标识符）
  @JsonKey(name: 'emvAid', defaultValue: '')
  String emvAid;

  /// EMV应用标签/名称
  @JsonKey(name: 'emvAppLabel', defaultValue: '')
  String emvAppLabel;

  /// 外部系统交易ID
  @JsonKey(name: 'externalTransactionID', defaultValue: '')
  String externalTransactionID;

  /// 商户编号
  @JsonKey(name: 'merchantID', defaultValue: '')
  String merchantID;

  /// 商户附加信息
  @JsonKey(name: 'merchantInfo')
  MerchantInfoRepsonse merchantInfo;

  /// PIN校验是否通过
  @JsonKey(name: 'pinOk', defaultValue: false)
  bool pinOk;

  /// 是否由支付APP打印收据
  @JsonKey(name: 'printByPaymentApp', defaultValue: false)
  bool printByPaymentApp;

  /// 支付网关返回的响应消息
  @JsonKey(name: 'responseMessage', defaultValue: '')
  String responseMessage;

  /// 交易结果代码：
  /// 0 = 成功
  /// 其他 = 错误代码
  @JsonKey(name: 'result', defaultValue: 0)
  int result;

  /// 终端流水号
  @JsonKey(name: 'sequenceNumber', defaultValue: '')
  String sequenceNumber;

  /// 终端编号
  @JsonKey(name: 'terminalID', defaultValue: '')
  String terminalID;

  /// 交易时间（格式：HHMMSS）
  @JsonKey(name: 'time', defaultValue: '')
  String time;

  /// 小费金额（单位：分）
  @JsonKey(name: 'tipAmount', defaultValue: '0')
  String tipAmount;

  /// 交易唯一标识符
  @JsonKey(name: 'transactionID', defaultValue: '')
  String transactionID;

  /// 交易类型：
  /// 1 = 消费
  /// 2 = 预授权
  /// 3 = 退款
  @JsonKey(name: 'transactionType', defaultValue: 1)
  int transactionType;

  TransactionResponse(
    this.amount,
    this.approvedCode,
    this.batchNumber,
    this.cardDataEntry,
    this.cardHolderVerificationMethod,
    this.cardNumber,
    this.cardProduct,
    this.currencyCode,
    this.date,
    this.emvAid,
    this.emvAppLabel,
    this.externalTransactionID,
    this.merchantID,
    this.merchantInfo,
    this.pinOk,
    this.printByPaymentApp,
    this.responseMessage,
    this.result,
    this.sequenceNumber,
    this.terminalID,
    this.time,
    this.tipAmount,
    this.transactionID,
    this.transactionType,
  );

  /// 从JSON数据构造TransactionResponse对象
  factory TransactionResponse.fromJson(Map<String, dynamic> srcJson) =>
      _$TransactionResponseFromJson(srcJson);

  /// 将对象转换为JSON数据
  Map<String, dynamic> toJson() => _$TransactionResponseToJson(this);
}
